<template>
    <div>
        <div style="display: flex;padding-bottom: 20px">
            <div style="flex :70%;">
                <el-input style="width: 200px;" placeholder="查询标题" v-model="username"></el-input>
                <el-button type="warning" style="margin-left: 10px" @click="load(1)">查询</el-button>
                <el-button type="info" @click="reset">重置</el-button>
            </div>
            <div style="flex :30%;">
                <el-button type="warning" plain @click="handleAdd">新增</el-button>
                <el-button type="danger" plain @click="delBatch">批量删除</el-button>
            </div>
        </div>


        <el-table  :data="tableData" :header-cell-style="{background:'aliceblue',color:'#666' ,fontSize:'16px' } "  @selection-change="handleSelectionChange">>
            <el-table-column type="selection" width="55" align="center"></el-table-column>
            <el-table-column label="序号" width="70px" prop="id" align="center"></el-table-column>
            <el-table-column label="标题" prop="title" align="center"></el-table-column>
            <el-table-column label="简介" prop="description" align="center"></el-table-column>
            <el-table-column label="内容" prop="content"show-overflow-tooltip  align="center">
                <template v-slot="scope">
                    <el-button @click="showContent(scope.row.content)"size="mini">显示内容</el-button>
                </template>
            </el-table-column>

            <el-table-column label="详情页" prop="content"  >
                <template v-slot="scope">
                    <el-button @click="$router.push('/newsDetail?id='+scope.row.id)"size="mini">在详情页显示</el-button>
                </template>
            </el-table-column>

            <el-table-column label="发布人" prop="author" align="center"></el-table-column>
            <el-table-column label="发布时间" prop="time" align="center"></el-table-column>


            <el-table-column label="操作" align="center" width="180px">
                <template v-slot="scope">
                    <el-button type="primary" plain size="mini" @click="handleEdit(scope.row)">编辑</el-button>
                    <el-button type="danger" plain size="mini" @click="del(scope.row.id)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <!--                    @current-change="handleCurrentChange"-->
        <div style="margin: 10px 0">
            <el-pagination
                    :current-page="pageNum"
                    :page-size="pageSize"
                    layout="total, prev, pager, next, jumper"
                    :total="total">
            </el-pagination>
        </div>

        <el-dialog title="新闻信息" :visible.sync="newsFormVisble" width="50%" @close="closeDialog":close-on-click-modal="false">
            <el-form :model="form" label-width="80px" style="padding-right: 20px" :rules="rules" ref="formRef">

                <el-form-item label="标题" prop="title">
                    <el-input v-model="form.title" placeholder="标题"></el-input>
                </el-form-item>
                <el-form-item label="简介" prop="description">
                    <el-input v-model="form.description" placeholder="简介"></el-input>
                </el-form-item>
                <el-form-item label="内容"  prop="content">
                    <div id="editor" ></div>
                </el-form-item>
            </el-form>
            <div slot="footer" class="dialog-footer">
                <el-button @click="newsFormVisble = false,handleCancel()">取 消</el-button>
                <el-button type="primary" @click="save">确 定</el-button>
            </div>
        </el-dialog>


        <el-dialog title="内容" :visible.sync="newsFormVisble1" width="50%" >
            <div>
                <el-card v-html="content"class="w-e-text"></el-card>
                <div slot="footer" class="dialog-footer">
                    <el-button type="primary" @click="newsFormVisble1=false">确 定</el-button>
                </div>
            </div>
        </el-dialog>


    </div>
</template>

<script>

    import E from "wangeditor"
    import hljs from 'highlight.js'
    export default {
        name: "News",
        data(){
            return {
                tableData: [],//所有的数据
                pageNum: 1, //当前页码
                pageSize: 5, //每页显示的个数
                username: '',
                title: '',
                total: 0,
                newsFormVisble: false,
                form: {},
                user: JSON.parse(localStorage.getItem('honey-user') || '{}'),
                rules: {
                    title: [
                        {required: true, message: '请输入标题', trigger: 'blur'},
                    ],

                },
                ids:[],
                editor: null,
                content:'',
                newsFormVisble1:false

            }
        },

        created() {
            this.load()
        },
        methods: {
            showContent(content){
                this.content=content
                this.newsFormVisble1=true
            },
            closeDialog(){
                // 销毁编辑器
                this.editor.destroy()
                this.editor = null
            },
            delBatch(){
                if (!this.ids.length){
                    this.$message.warning('请选择数据')
                    return
                }
                this.$confirm('你确认批量删除这些数据吗？','确认删除',{type:"warning"}).then(resp=>{
                    this.$request.delete('/news/delete/batch',{
                        data:this.ids
                    }).then(res=>{
                        if (res.code === '200') {
                            this.$message.success('操作成功')
                            this.load()
                        }else {
                            this.$message.error('删除失败，无法删除管理员')//弹出错误信息
                            this.load()
                        }
                    })

                }).catch(()=>{})
            },
            handleSelectionChange(rows) {
                this.ids =  rows.map(v=>v.id) //获取每一个数据的id，把一个对象数组变成一个数字数组
            },
            del(id){
                this.$confirm('你确认删除吗？','确认删除',{type:"warning"}).then(resp=>{
                    this.$request.delete('/news/delete/'+id).then(res=>{
                        if (res.code === '200') {
                            this.$message.success('操作成功')
                            this.load()
                        }else {
                            this.$message.error('删除失败，无权限')//弹出错误信息
                            this.load()
                        }
                    })

                }).catch(()=>{})
            },
            handleCancel() {
                formRef.value.resetFields();
            },
            setRichText(){
                this.$nextTick(()=>{
                    this.editor = new E(`#editor`)
                    this.editor.highlight = hljs
                    this.editor.config.uploadImgServer = this.$baseUrl + '/file/editor/upload'
                    this.editor.config.uploadFileName = 'file'
                    this.editor.config.uploadImgHeaders = {
                        token: this.user.token
                    }
                    this.editor.config.uploadImgParams={
                        type:'img'
                    }
                    this.editor.config.uploadImgMaxSize = 20 * 1024 * 1024 // 10M
                    this.editor.config.uploadVideoServer = this.$baseUrl + '/file/editor/upload'
                    this.editor.config.uploadVideoName = 'file'
                    this.editor.config.uploadVideoHeaders = {
                        token: this.user.token
                    }
                    this.editor.config.uploadVideoParams={
                        type:'video'
                    }
                    this.editor.config.maxFileSize= 200 * 1024 * 1024, // 200M
                        this.editor.config.allowedFileTypes=['mp4','MP4'],
                        this.editor.create()  // 创建
                })
            },
            handleEdit(row) {//编辑数据
                this.form = JSON.parse(JSON.stringify(row)) //给form对象赋值，注意要深拷贝
                this.newsFormVisble = true  //打开弹窗
                this.setRichText()
                //设置延时
                setTimeout(()=>{
                    this.editor.txt.html(row.content)   // 获取内容
                },0)
            },
            handleAdd() {//新增数据
                this.form = {}//新增数据的时候清空
                this.newsFormVisble = true; //打开弹窗
               this.setRichText()

            },
            save() {
                this.$refs.formRef.validate((valid) => {
                    if (valid) {
                        //获取编辑框的内容
                        let content = this.editor.txt.html()   // 设置html
                        this.form.content=content


                        this.$request({
                            url: this.form.id ? '/news/update' : '/news/add',
                            method: this.form.id ? 'PUT' : 'POST',
                            data: this.form
                        }).then(res => {
                            if (res.code === '200') {//表示成功保存
                                this.$message.success('保存成功')
                                this.newsFormVisble = false;
                                this.load(1)

                            } else {
                                this.$message.error(res.msg)//弹出错误信息
                            }
                        })
                    }
                })

            },
            handleAvatarSuccess(response, file, fileList) {
                // 把user的头像属性换成上传的图片的链接
                this.form.avatar = response.data
            },
            reset() {
                this.title = '',
                    this.load();
            },
            load(pageNum) {//分页查询
                if (pageNum) this.pageNum = pageNum;

                this.$request.get('/news/selectByPage', {
                    params: {
                        pageNum: this.pageNum,
                        pageSize: this.pageSize,
                        title: this.title,
                    }
                }).then(res => {
                    this.tableData = res.data.records
                    this.total = res.data.total
                })
            },


        }
    }
</script>

<style scoped>


</style>